package com.xiaoniu.forum.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xiaoniu.forum.common.event.ForumEvent;
import com.xiaoniu.forum.common.utils.PageUtils;
import com.xiaoniu.forum.entity.MemberMessageEntity;
import com.xiaoniu.forum.entity.dto.QueryDTO;
import com.xiaoniu.forum.entity.vo.Dialogue;

import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

/**
 * 消息表，用户与用户对话的数据就存在该表
注意：该表不仅仅可用于用户与用户对话，还可以用于系统给用户发送消息
       而且用户点击消息后，不一定是打开对话框页面，有可能是跳转到某个页面
 *
 * @author xiaoniu
 * @email 55333@qq.com
 * @date 2021-03-24 09:19:33
 */
public interface MemberMessageService extends IService<MemberMessageEntity> {

    PageUtils queryPage(Map<String, Object> params);

    MemberMessageEntity sendEvent(ForumEvent forumEvent);

    boolean sendMessage(MemberMessageEntity messageEntity);


    /**
     *  获取用户的对话列表
     */
    List<Dialogue> dialogueList(String id);

    /**
     *  获取用户的最新的一条消息
     */
    MemberMessageEntity getLastMessage(String id);

    /**
     * 查询用户与某个用户的聊天记录，消息按时间倒序分页获取
     * @param currentUserId
     * @param anotherUserId
     * @param queryDTO      分页条件
     * queryDTO excludeTypes  排除的消息类型
     * @return
     *
     */
    PageUtils historyList(String currentUserId, String anotherUserId, QueryDTO queryDTO);

    /**
     *   获取两个用户之间最早的历史消息
     */
    MemberMessageEntity getEarliestHistoryMessage(String id1, String id2);

    PageUtils historyListByType(String id, Integer type, Integer currentPage, Integer size);
}

